package main

import "fmt"

func main() {
	defer fmt.Println("main ======= 2")
	defer fmt.Println("main========3")
	fmt.Println("main" + "=====1")
	test1(1)
	fmt.Println("main======4")
}
func test1(num int) {

	//当有recover时，程序之前因为panic的异常会恢复恐慌  就会让外部函数继续执行
	defer func() {
		msg := recover()
		if msg != nil {
			fmt.Println("msg:"+"dsa", msg, "程序恢复执行")
		}
	}()

	//当一个程序中有panic时，会逆序执行deffer后面的程序
	//然后再返回到main程序中 ，再逆序执行main程序中的deffer后面的程序
	//最后抛出异常
	//此时不会执行  main=====4
	//但是会逆序执行main defer后面的程序 复述第二行
	defer fmt.Println("test========1")
	defer fmt.Println("test========2")
	fmt.Println("test =========3 ")
	if num == 1 {
		panic("程序异常了")
	}
	fmt.Println("test =======4 ")
}
